#include "CreerScenario.h"
CreerScenario::CreerScenario()
{
}

CreerScenario::CreerScenario(char fichierXML[], int nbPlanVols)
{
  std::vector<int> vCoeff; //juste pour la compilation a remplacer par la chaine de coeff
  int i;
  string sCoeff;
  for (i=0;i<(nbPlanVols*2);i++){
    sCoeff += "1";
    vCoeff.push_back(atoi((char*)(sCoeff.substr(i,1)).c_str()));
  }
  
  //ecris le scenario num 1 initial
  EcrisScenarioXML esc;
  esc.ecrisScenarioXMLNumX(fichierXML, nbPlanVols, vCoeff);
  
  /*  
      std::vector<int> vIdVol = epv.getvIdVol();
      printf("vIdVol.size() = %d\n",vIdVol.size());
      
      std::vector<int> vNiveauVol = epv.getvNiveauVol();
      printf("vNiveauVol.size() = %d\n",vNiveauVol.size());
  */

  // initialisation des attribut de la classe
  // - lis le fichier XML tout juste cree pour mettre en attribut de classe
  //   le vecteur de plans de vol
  // - renseigne le nombre de plans de vols
  
  ListePlansVols lpl(fichierXML);
  this->vPVinitial = lpl.getvPlansVols();
  this->nbPlanVols = nbPlanVols;
  

  /*
    for(std::vector<PlanVol>::iterator it = vPVinitial.begin(); it != vPVinitial.end(); ++it)
    {
    printf("num Plan de Vol: %d\n",(*it).getIdVol());
    }
    printf("le nb de plans de vols est %d\n",this->nbPlanVols);
  */
}

// ecris un fichier xml nomme "scenarioX.xml" correspondant au scenario numero X
void CreerScenario::creerScenarioNumX(unsigned long long int numScenario)
{
  int nbEtat = 3;
  unsigned long int nbCol = this->nbPlanVols * 2;
  unsigned long long int reste = 0;
  unsigned long long int diviseur = 0;
  int val = 0;
  std::vector<int> vCoeff;

  reste = numScenario;
  
  if (numScenario < pow(nbEtat,nbCol)){
    
    for (int i = nbCol-1; i>=0; i--){
      diviseur = (long long int)pow(nbEtat,i);
      val = reste / diviseur;
      reste = reste % diviseur;
      vCoeff.push_back(val+1);
    }

    /*
      std::vector<int>::iterator it = vCoeff.begin(); 
      while (it != vCoeff.end()) printf("%d\t", *(it++));
      printf("\n");
    */
    /*
      le premier parametre qui change est l'heure de depart
      le deuxieme parametre qui change est le niveau de vol
      
      Un coeff a 1 veut dire inchange
      Un coeff a 2 veut dire valeur -= increment
      Un coeff a 3 veut dire valeur += increment

      L'increment pour l'heure de depart est fixe a 10 minutes
      L'increment pour le niveau de vol est fixer a 5 unites
    */

    string nom("scenario");
    char cnumScenario[10];
    sprintf(cnumScenario, "%llu", numScenario+1);
    string ns(cnumScenario);
    string extension(".xml");
    string fichierSortie = nom + ns + extension;
    
    EcrisScenarioXML esc;
    esc.ecrisScenarioXMLNumX((char*)fichierSortie.c_str(), this->nbPlanVols, vCoeff);
  }
}


CreerScenario::~CreerScenario()
{
}
